﻿using UnityEngine;
using System.Collections;

public class HUDFPS : MonoBehaviour
{

    // Attach this to a GUIText to make a frames/second indicator.
    //
    // It calculates frames/second over each updateInterval,
    // so the display does not keep changing wildly.
    //
    // It is also fairly accurate at very low FPS counts (<10).
    // We do this not by simply counting frames per interval, but
    // by accumulating FPS for each frame. This way we end up with
    // correct overall FPS even if the interval renders something like
    // 5.5 frames.

    public float updateInterval = 0.5F;

    private float accum = 0; // FPS accumulated over the interval
    private int frames = 0; // Frames drawn over the interval
    private float timeleft; // Left time for current interval
	
	private float fpsSum;			//一段时间内fps总和
	private int computationTime = 5 * 60;//间隔多长时间计算一次FPS总和
	private int fpsCount;
	
    void Start()
    {
        if (!guiText)
        {
            Debug.Log("UtilityFramesPerSecond needs a GUIText component!");
            enabled = false;
            return;
        }
        timeleft = updateInterval;
    }
	public static HUDFPS GetInst()
	{
		return inst;
	}
	static HUDFPS inst;
	void Awake()
	{
		inst = this;
		fpsSum = 0;
		fpsCount = 0;
	}
	public bool bShowUI = false;
	void OnGUI()
	{
		if(bShowUI)
		{
			GUI.Label(new Rect((Screen.width -400),2,150,20),guiText.text);
		}
	}
	public float fps;
    void Update()
    {
		if(Input.GetKey(KeyCode.LeftControl) && Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.F))
		{
			bShowUI = !bShowUI ;
		}
        timeleft -= Time.deltaTime;
        accum += Time.timeScale / Time.deltaTime;
        ++frames;

        // Interval ended - update GUI text and start new interval
        if (timeleft <= 0.0)
        {
            // display two fractional digits (f2 format)
            fps = accum / frames;
            string format =((int)(fps)).ToString();// , fps);
			format+=" FPS";
            guiText.text = format;

            if (fps < 30)
                guiText.material.color = Color.yellow;
            else
                if (fps < 10)
                    guiText.material.color = Color.red;
                else
                    guiText.material.color = Color.green;
            //  DebugConsole.Log(format,level);
            timeleft = updateInterval;
            accum = 0.0F;
            frames = 0;
			
			CollectFpsCount();
        }
    }
	
	void CollectFpsCount()
	{
		fpsSum += fps;
		fpsCount++;
//		if(fpsCount >= computationTime / updateInterval)
//		{
//			fpsSum = fpsSum / fpsCount / 15;
//			fpsSum = fpsSum < 1 ? 1 : fpsSum > 5 ? 5 : fpsSum;
//			if((int)fps != Logic.GetInstance().config_game.default_grade)
//				TQualitySetting.GetInst().SetLevel((int)fpsSum);
//			fpsCount = 0;
//			fpsSum = 0;
//		}
	}
}